package leetcode.year2021.month12;

import leetcode.utils.ListNode;

// 2. 两数相加
public class _03_1AddTwoNumbers2 {
  /**
   * 思路：用carry携带要 进位的 值
   * @param l1
   * @param l2
   * @return
   */
  public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode();
    ListNode prev = dummy;
    int carray = 0;
    while (l1 != null || l2 != null || carray != 0){
      int currVal = carray;

      if (l1 != null){
        currVal += l1.val;
      }

      if (l2 != null){
        currVal += l2.val;
      }

      carray = currVal/10;

      ListNode currNode = new ListNode(currVal % 10);

      prev.next = currNode;
      prev = currNode;

      l1 = l1 == null ? null : l1.next;
      l2 = l2 == null ? null : l2.next;
    }
    return dummy.next;
  }
  /**
   * 2. 两数相加
   * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
   *
   * 请你将两个数相加，并以相同形式返回一个表示和的链表。
   *
   * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
   *
   *
   *
   * 示例 1：
   *
   *
   * 输入：l1 = [2,4,3], l2 = [5,6,4]
   * 输出：[7,0,8]
   * 解释：342 + 465 = 807.
   * 示例 2：
   *
   * 输入：l1 = [0], l2 = [0]
   * 输出：[0]
   * 示例 3：
   *
   * 输入：l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
   * 输出：[8,9,9,9,0,0,0,1]
   *
   *
   * 提示：
   *
   * 每个链表中的节点数在范围 [1, 100] 内
   * 0 <= Node.val <= 9
   * 题目数据保证列表表示的数字不含前导零
   */
}
